#define _CRT_SECURE_NO_WARNINGS 
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//ll n, V;
//ll w[110], v[110];
//ll dp[1010][1010];
//int main()
//{
//	cin >> n >> V;
//	for (ll i = 1; i <= n; i++)
//	{
//		cin >> v[i] >> w[i];
//	}
//	for (ll i = 1; i <= n; i++)
//	{
//		for (ll j = 1; j <= V; j++)
//		{
//			if (j < v[i])
//			{
//				dp[i][j] = dp[i - 1][j];
//			}
//			else if (i - v[j] >= 0)
//			{
//				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i]] + w[i]);
//			}
//		}
//		
//	}
//	cout << dp[n][V] << endl;
//	return 0;
//}
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 2010;
const ll M = 1e6 + 10;
ll w[N], v[N];
ll dp[2][M];
int main()
{
	ll n, m,k;
	cin >> n >> m >> k;
	for (ll i = 1; i <= n; i++)
	{
		ciin >> w[i] >> v[i];
	}
	for (ll i = 1; i <= n; i++)
	{
		for (ll j = m; j >= w[i]; j--)
		{
			dp[0][j] = max(dp[0][j], dp[0][j - w[i]] + v[i]);
			dp[1][j] = max(dp[1][j], dp[1][j - w[i]] + v[i]);
			if (j - (w[i] + k) >= 0)
			{
				dp[1][j] = max(dp[1][j], dp[0][j - w[i] - k] + v[i] * 2);
			}
		}
	}
	cout << max(dp[0][m], dp[1][m]) << endl;
	return 0;
}